//邻接表：存储图和树
#include<iostream>

using namespace std;

const int N = 100010;

int head, e[N], ne[N], idx;//head表示头节点的下标，e表示某个点的值，ne表示某个点的next指针，idx存储当前已经用到最新的点

//初始化
void init(){
    head = -1;
    idx = 0;
}
//将x插入到头结点
void add_to_head(int x){
    e[idx] = x;
    ne[idx] = head;
    head = idx;
    idx ++;
}
//将x插入到下标是k的点的后面
void add(int k, int x){
    e[idx] = x;
    ne[idx] = ne[k];
    ne[k] = idx;
    idx ++;
}
//将下标是k的点的后面的点删除
void remove(int k){
    ne[k] = ne[ne[k]];
}

int main(){
    int m;
    cin >> m;
    init();
    while(m --){
        char a;
        cin >> a;
        if(a == 'H'){
            int x;
            cin >> x;
            add_to_head(x);
        }
        else if(a == 'D'){
            int k;
            cin >> k;
            if(k != 0) remove(k - 1);
            else head = ne[head];
        }
        else{
            int k, x;
            cin >> k >> x;
            add(k - 1, x);
        }
    }
    for(int i = head; i != -1; i = ne[i]) cout << e[i] << " ";
}